package cn.whao.guli.order.rule;

import com.netflix.loadbalancer.ILoadBalancer;
import com.netflix.loadbalancer.RandomRule;
import com.netflix.loadbalancer.Server;

import java.util.List;
import java.util.Random;

/**
 * ClassName: MyRandomRule
 * Package: cn.whao.guli.order.rule
 * Description:
 *
 * @Author 王豪
 * @Create 2024/11/28 9:19
 * @Version 1.0
 */
public class MyRandomRule extends RandomRule {

    @Override
    public Server choose(ILoadBalancer lb, Object key) {
        // 获取要访问的目标服务的所有的ip端口号列表
        List<Server> allServers = lb.getAllServers();
        // 获取访问的在线目标服务集合：例如通过GULI-STOCK现在可以获取到 8083 8183两个服务的配置
        List<Server> reachableServers = lb.getReachableServers();
        // 获取在线目标服务的数量
        int count = reachableServers.size();
        if (0 == count) {
            return null;
        }
        // 获取 0~count~1之间的随机数，从集合中获取索引位置的服务
        return reachableServers.get(new Random().nextInt(count));
    }
}
